Skip to main content link. Accesskey S
  • Help
  • HCL Logo
  • HCL Notes and Domino Application Development wiki
  • THIS WIKI IS READ-ONLY. Individual names altered for privacy purposes.
  • HCL Forums and Blogs
  • Home
  • Product Documentation
  • Community Articles
  • Learning Center
  • API Documentation
Search
Community Articles > 日本語 - Japanese > XPages からサーバーエージェントを実行する
  • Share Show Menu▼
  • Subscribe Show Menu▼

Recent articles by this author

XPages アプリケーションで Embedded Experience メールを実現する

XPages アプリケーションを Embedded Experience メールで利用する際の実現方法の解説です。

Embedded Experience メールを試す

IBM NotesDomino 9.0 Social Edtion で XPages を利用した Embedded Experience メールの実現方法です。

How to use OpenSocial Gadgets in IBM Notes

IBM Notes 9.0 enables you to use OpenSocial Gadgets on our business. This document describes how to use OpenSocial Gadgets in IBM Notes 9.0.

IBM iNotes で OpenSocial Gadgets を利用する

IBM iNotes で OpenSocial Gadgets を利用する際の設定方法です。

IBM Notes で OpenSocial Gadgets を利用する

IBM NotesDomino 9.0 Social Edition から利用可能になった OpenSocial Gagdtes を利用する際の設定方法です。
Community articleXPages からサーバーエージェントを実行する
Added by ~Anita Bregeromanli | Edited by ~Anita Bregeromanli on July 25, 2012 | Version 2
  • Actions Show Menu▼
expanded Abstract
collapsed Abstract
XPages からサーバーエージェントを実行する方法を解説します
Tags: XPages, サーバーエージェント, 九州地区ノーツパートナー会
ShowTable of Contents
HideTable of Contents
  • 1 概要
  • 2 実現方法
    • 2.1 エージェントの準備
    • 2.2 Xpageからのエージェントの呼び出し
    • 2.3 エージェントの実行
  • 3 まとめ
  • 4 参考サイト
  • 5 調査環境

概要



フォームでは、表示した文書の保存のタイミングで、入力チェックや他の文書への処理などを行っている例は少なくない。
このような場合、LotusScriptを使ってエージェントやスクリプトライブラリに処理を記述している。

ここでは、そのような既存のソースを有効活用する または、使いなれたLotusScriptをできるだけ利用する為に
LotusScriptで記述されたエージェントを呼び出す方法について記述する。

実現方法


agentクラスのrunWithDocumentContext関数を利用して実現できる。

以下、2通りの方法がある。



実現方法
詳細
①保存した文書をエージェントに渡す方法xPage上でバインディングされた文書内の値を利用してエージェントを呼び出す場合に有効。

ただし、一旦文書の保存が必要。

②文書を保存せずにエージェントに渡す方法ダミー用にcreateされた文書へxPage上の値を渡し、エージェントを呼び出す。文書を保存したくない場合に有効。

  ◆補足

  agentクラスのrun関数にて文書のNoteIDを渡す方法もあるが、ここでは説明対象外とする。


エージェントの準備

呼び出すエージェントとして既存のエージェントをそのまま利用した場合、

サーバーサイドでの処理の為、MessageBoxが表示されないなど何点か不具合が生じる。

不具合解消のためには、事前にエージェントを修正しておく必要がある。


  ◆補足

  エージェントを使用せず、直接スクリプトライブラリに作成した関数を使用していた場合は、呼び出す為のエージェントを作成する必要がある。



1.既存エージェントの修正

  エージェントの処理内容や作り方によって異なってくるが、以下の内容をポイントに見直し修正する。


◆修正ポイントと詳細
修正のポイント
詳細
UIに表示されたdocumentを取得
runWithDocumentContextにてエージェントに引き渡されたdocumentを取得する為にエージェント冒頭でNotesSessionクラスのDocumentContextプロパティを使用する必要がある。


Set doc = session.DocumentContext
エラーハンドリング対策MessageBoxの代わりにエラー内容(または、エラーキー)をdocumentに埋め込む。

戻ってきたエラー内容をクライアントサイドで画面上に表示するなどのハンドリングを行う。

◆エージェントの修正例

項目
①保存した文書をエージェントに渡す場合
②文書を保存せずにエージェントに渡す場合
修正内容【UIに表示されたdocumentを取得】
UIの値を一旦保存することで、アイテムをxPage上でバインディングされた文書内の値から取得する。

【エラーハンドリング対策】


エラーハンドリングを行い、エラー内容をDocumentに埋め込む。
【UIに表示されたdocumentを取得】
UIの値をダミー文書を介して取得する。

【エラーハンドリング対策】


エラーハンドリングを行い、エラーキーをダミー文書を介して返す。
修正例Sub Initialize
Dim session As New NotesSession
Dim doc As NotesDocument
Dim lByteLen As Long
Dim lCharLen As Long
Dim sErrCD As String

'保存された文書を取得する。
Set doc = session.DocumentContext

'入力チェック
'未入力
If Len(Trim$(doc.Getitemvalue("Text")(0))) = 0 Then
sErrCD = "ERR1"
GoTo Err_Handle
End If

'半?チェック
' チェック文字列のバイト数を取得
lByteLen = LenBP(Trim$(doc.Getitemvalue("Text")(0)))

' チェック文字列の桁数を取得
lCharLen = Len(Trim$(doc.Getitemvalue("Text")(0)))

If lByteLen <> lCharLen Then
sErrCD = "ERR2"
GoTo Err_Handle
End If

Call doc.ReplaceItemValue("Out_Text", "")
Call doc.Save(True, False)

Exit Sub
Err_Handle:
Select Case sErrCD
Case "ERR1"
Call doc.ReplaceItemValue("Out_Text", "テキスト内容を入力してください。")
Case "ERR2"
Call doc.ReplaceItemValue("Out_Text", "半角で入力してください。")
End Select
Call doc.Save(True, False)
End Sub
Sub Initialize
Dim session As New NotesSession
Dim doc As NotesDocument
Dim item As NotesItem
Dim lByteLen As Long
Dim lCharLen As Long

'UIの画面項目を取得する。
Set doc = session.DocumentContext

'入力チェック
'未入力
If Len(Trim$(doc.Getitemvalue("Input")(0))) = 0 Then
Set item = doc.AppendItemValue("Output","ERR1")
End If

'半角チェック
' チェック文字列のバイト数を取得
lByteLen = LenBP(Trim$(doc.Getitemvalue("Input")(0)))

' チェック文字列の桁数を取得
lCharLen = Len(Trim$(doc.Getitemvalue("Input")(0)))

If lByteLen <> lCharLen Then
Set item = doc.AppendItemValue("Output","ERR2")
End If

End Sub

2.エージェントのプロパティ設定

  エージェントをWebで実行できるようにするには、以下の設定が必要となる。

  (この設定は、文書の保存の有無に関わらず、共通)

  2-1.[プロパティ]-[基本]-[名前]にエージェント名に該当する「名前」を入力し、実行時オプションの対象を「なし」にする。

 

  2-2.[プロパティ]-[セキュリティー]を選択し、「Webユーザーとして実行」にチェックを入れる。

 



Xpageからのエージェントの呼び出し

Xpageからのエージェントの呼び出しは、「①保存した文書をエージェントに渡す場合」と、「②文書を保存せずにエージェントに渡す場合」で手順が異なる。


  ①保存した文書をエージェントに渡す場合

1.Xpageの作成

  新規Xpageを作成し、入力チェックを行うフィールドとチェックの結果を表示するフィールド、エージェントを呼び出すボタンを作成する。

   ◆補足

   データソースとなるフォーム、フィールドはあらかじめ作成しておく。



  1-1.新規にXPageを作成。

 

 

  1-2.Xpageにフィールドを配置する。

 

  1-3.フィールドに定義したデータソースをバインディングする。

 

     ◆補足

プロパティタブでの設定も可能。

2.エージェントの呼び出し

  2-1.イベントタブのonclickでアクションを追加する。

 

  2-2.保存した文書を渡すため、最初に文書を保存する。

 

     ◆補足

     あらかじめ文書が保存されている場合は不要。

  2-3.エージェントを呼び出すための記述を記載する。
 


◆JavaScriptの詳細内容
保存した文書を処理する場合
補足説明

var agent = database.getAgent("Test2Agent");

//保存されたデータソースを定義する。
var doc = Test2.getDocument();

//エージェント実行に現在の保存されたデータソースを渡す。
agent.runWithDocumentContext(doc);
agent.recycle();
context.reloadPage(); 
    
 
呼び出すエージェントを定義


>フィールドの値をセットするデータソースを定義


>Xpageからエージェント呼び出す。引数にデータソースを渡す。
>オブジェクトを破棄し、メモリをシステムに返す。
>サーバースクリプトを実行しているコンテキストを再ロードする。



  ②文書を保存せずにエージェントに渡す場合

1.Xpageの作成

  新規Xpageの作成は、「①-1.Xpageの作成」と同様。

  ただし、データのバインディングは不要。



2.エージェントの呼び出し

  2-1.イベントタブのonclickでアクションを追加する。

 



  2-2.エージェントを呼び出すための記述を記載します。

 


◆JavaScriptの詳細内容

処理内容
補足説明

var agent = database.getAgent("Test2Agent");
var compInput = getComponent("Text");					
var compOutput:com.ibm.xsp.component.xp.XspInputText = getComponent("Out_Text");

//エージェント実行に必要な情報をDocに保持して渡す。
var doc = database.createDocument();
//入力した値を取得し、Docに保持する。
var paramIn = compInput.getValue();
doc.appendItemValue("Input",paramIn);

//エージェント起動
agent.runWithDocumentContext(doc);

//エージェントからの戻りでエラーハンドリング
if (doc.getItemValueString("Output") == ""){				
	compOutput.setValueFromString("OK");
}else{
	if (doc.getItemValueString("Output") == "ERR1"){		
		compOutput.setValueFromString("テキスト内容を入力してください。");
	}else{
		compOutput.setValueFromString("半角で入力してください。");
	}
}
//エージェントに引き渡すために作成したDocを破棄する。
doc.recycle();
agent.recycle();
 
呼び出すエージェントを定義
>入力チェックを行うフィールドから値を取得

>入力チェックの結果を表示するフィールドの定義
(UIに直接テキストをセットする型を定義)


>エージェントに渡すダミー文書を作成する。


>入力チェックを行う値をダミー文書に追加する。





>ダミー文書から結果を取得しエラーハンドリングする。




>入力チェックの結果がエラーの時、エラー文言を表示

エージェントの実行


エージェントを実行すると、以下のように動作する。

     ◆エージェントの実行例<1>

(実行前)

 

(実行後)


 

     ◆エージェントの実行例<2>

(実行前)
 

(実行後)

まとめ


既存のエージェントやスクリプトライブラリを再利用して、xPagesから処理を行いたいといったケースは多々あると想定される。
そのような場合、上記のように多少の改訂は必要なものの、UIの処理目的に応じて対応することは可能になる。

参考サイト

http://www-10.lotus.com/ldd/ddwiki.nsf/dx/XPages_and_Calling_Agents_Using_an_In-Memory_Document


調査環境


Lotus Domino Designer 8.5.3 Upgrade Pack1
Internet Explorer 8
Google Chrome 19.0.1084.46 m
Mozilla Firefox 12
Safari 5.1.5

この記事は九州地区ノーツパートナー会技術部会(リコー IT ソリューションズ 株式会社)によって作成されました。

  • Actions Show Menu▼


expanded Attachments (0)
collapsed Attachments (0)
Edit the article to add or modify attachments.
expanded Versions (2)
collapsed Versions (2)
Version Comparison     
VersionDateChanged by              Summary of changes
This version (2)Jul 25, 2012, 8:34:37 AM~Anita Bregeromanli  
1Jul 25, 2012, 8:12:14 AM~Nicole Desjumizenli  
expanded Comments (0)
collapsed Comments (0)
Copy and paste this wiki markup to link to this article from another article in this wiki.
Go ElsewhereStay ConnectedAbout
  • HCL Software
  • HCL Digital Solutions community
  • HCL Software support
  • BlogsDigital Solutions blog
  • Community LinkHCL Software forums and blogs
  • About HCL
  • Privacy
  • Accessibility